#include "dboinwebserver.h"
#include "macro.h"
#include <QtSql>
#include <QTimer>
#include <QMessageBox>

DBOInWebserver::DBOInWebserver(QObject *parent):
    QObject(parent)
{
    qury=NULL;
    timerForDBConnect=new QTimer(this);
    connect(timerForDBConnect,SIGNAL(timeout()),this,SLOT(slotTimerEventDBConnect()));
}

/***************************************************
在ThreadDBORelated的RUN函数中，初始化DBO类后，会立即调用createConnection函数
建立与数据库的连接.
获得该连接的方法：
QSqlDatabase db=QSqlDatabase::database( QString connectionName);
相应的，要用下面的语句来定义一个QSqlQuery。
QSqlQuery query(QSqlDatabase::database( QString connectionName));
******************************************************/
bool DBOInWebserver::createConnection(const QString dataBase, const QString host, const QString user,
               const QString passWord, const QString connectionName) //建立一个连接
{
     //plugin的搜索路径增加当前目录下的plugins文件夹。该语句主要为了发布之便。
    qApp->addLibraryPath(qApp->applicationDirPath () + "/plugins");

    dboConnectionName=connectionName;
    //添加驱动
    QSqlDatabase connectionFromServer=QSqlDatabase::addDatabase(DB_TYPE,connectionName);
    connectionFromServer.setHostName( host);//数据库所在主机的IP
    connectionFromServer.setDatabaseName(dataBase);//操作example数据库
    if(!connectionFromServer.open(user,passWord))
    {
        emit sigErrorInfo("Database Error"+connectionFromServer.lastError().text());

        return false;
    }
    else
    {
        timerForDBConnect->start(MSForDBConnect);
        qury=new QSqlQuery(QSqlDatabase::database(connectionName));
    }

    return true;
}

void DBOInWebserver::slotTimerEventDBConnect()
{
    QSqlDatabase db=QSqlDatabase::database(dboConnectionName);
    if(db.isOpen())
    {
        QSqlQuery tempQuery(QSqlDatabase::database(dboConnectionName));

        tempQuery.exec("select 1");
    }
}


DBOInWebserver::~DBOInWebserver()
{
    QSqlDatabase db=QSqlDatabase::database(dboConnectionName);
    if(db.isOpen())
    {
        db.close();
    }
    if(!db.isOpen())
    {
        //qDebug()<<"connection "+dboConnectionName+" disconnected";
    }
}

void DBOInWebserver::slotTestSignal()
{
    //emit sigAddVideoSource("127.0.0.1",6789,11111,11);
}
